﻿using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using System.Linq;
using VO;
using COMMON;
using BLL;

namespace PopPromotoraCallCenter.Admin
{
    public partial class RegraCadastro : System.Web.UI.Page
    {

        protected List<StatusIncidencia> ListIncidencia
        {
            set
            {
                ViewState["listIncidencia"] = value;
            }
            get
            {
                var list = new List<StatusIncidencia>();
                if (ViewState["listIncidencia"] != null)
                {
                    list = (List<StatusIncidencia>)ViewState["listIncidencia"];
                }
                return list;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CarregarGridRegra();
                CarregarComboStatus();
                CarregarComboTipoRegra();
            }
        }

        

        #region CarregarGridRegra
        protected void CarregarGridRegra()
        {
            var retorno = RegraAtendimentoBLL.SelectAll();
            if (retorno.Error == Enumerator.Error.Success)
            {
                gvRegra.DataSource = retorno.List;
                gvRegra.DataBind();
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #region CarregarGridIncidencia
        //protected void CarregarGridIncidencia()
        //{
        //    gvIncidencia.DataSource = ListIncidencia;
        //    gvIncidencia.DataBind();
        //}
        //#endregion

        #region CarregarComboStatus
        protected void CarregarComboStatus()
        {
            var retorno = StatusAtendimentoBLL.Select();
            if (retorno.Error == Enumerator.Error.Success)
            {
                ddlStatus.DataTextField = "nome";
                ddlStatus.DataValueField = "idStatus";
                ddlStatus.DataSource = retorno.List;
                ddlStatus.DataBind();
                ddlStatus.Items.Insert(0, new ListItem("selecione", "0"));
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #region CarregarComboTipoRegra
        protected void CarregarComboTipoRegra()
        {
            var retorno = TipoRegraAtendimentoBLL.Select();
            if (retorno.Error == Enumerator.Error.Success)
            {
                ddlTipoRegra.DataTextField = "Nome";
                ddlTipoRegra.DataValueField = "Sigla";
                ddlTipoRegra.DataSource = retorno.List;
                ddlTipoRegra.DataBind();
                ddlTipoRegra.Items.Insert(0, new ListItem("selecione", "0"));
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #region InsereListIncidencia
        protected void InsereListIncidencia(StatusIncidencia obj)
        {
            var list = ListIncidencia;
            list.Add(obj);
            ListIncidencia = list;
        }
        #endregion

        #region RemoveListIncidencia
        protected void RemoveListIncidencia(StatusIncidencia obj)
        {
            var list = ListIncidencia;
            list.Remove(obj);
            ListIncidencia = list;
        }
        #endregion

        //#region GravaList
        //protected void GravaList(bool insere = false)
        //{
        //    LimpaListIncidencia();
        //    int count = 0;
        //    foreach (GridViewRow row in gvIncidencia.Rows)
        //    {
        //        var obj = new StatusIncidencia();
        //        int dias = 0;
        //        int incidencia = 0;
        //        int idStatus = 0;
        //        int.TryParse((row.FindControl("txtDia") as TextBox).Text, out dias);
        //        int.TryParse((row.FindControl("txtIncidencia") as TextBox).Text, out incidencia);
        //        int.TryParse(ddlStatus.SelectedValue, out idStatus);
        //        obj.idStatusIncidencia = ++count;
        //        obj.idSituacao = idStatus;
        //        obj.qtd = incidencia;
        //        obj.dias = dias;
        //        InsereListIncidencia(obj);
        //    }
        //    if (insere)
        //    {
        //        var obj = new StatusIncidencia();
        //        obj.idStatusIncidencia = ++count;
        //        InsereListIncidencia(obj);
        //    }
        //}
        //#endregion

        #region LimpaListIncidencia
        protected void LimpaListIncidencia()
        {
            ListIncidencia.Clear();
        }
        #endregion

        #region LimparCampos
        protected void LimparCampos()
        {
            txtNomeRegra.Text = string.Empty;
            txtDescricaoRegra.Text = string.Empty;
            ddlTipoRegra.SelectedIndex = 0;
            ddlStatus.SelectedIndex = 0;
            //gvIncidencia.DataBind();
            hfRegraId.Value = "0";
        }
        #endregion

        #region GravarRegra
        protected void GravarRegra()
        {
            if (ValidarRegra())
            {
                var idRegra = 0;
                var obj = new RegraAtendimento();
                obj.idRegraCallCenter = int.Parse(hfRegraId.Value);
                obj.NomeRegra = txtNomeRegra.Text.Trim();
                obj.DescricaoRegra = txtDescricaoRegra.Text.Trim();
                obj.fgAtivo = true;
                obj.Sigla = ddlTipoRegra.SelectedValue;
                var retorno = new Retorno<RegraAtendimento>();
                if (obj.idRegraCallCenter == 0)
                {
                    retorno = RegraAtendimentoBLL.Insert(obj);
                    idRegra = retorno.ID;
                }
                else
                {
                    retorno = RegraAtendimentoBLL.Update(obj);
                    idRegra = obj.idRegraCallCenter;
                }
                if (retorno.Error == Enumerator.Error.Failed)
                    //GravarIncidencia(idRegra);
                    //else
                    Funcao.Alert(ClientScript, retorno.Message);
                
                mvRegra.ActiveViewIndex = 0;
                CarregarGridRegra();
            }
        }
        #endregion

        //#region GravarIncidencia
        //protected void GravarIncidencia(int idRegra)
        //{
        //    if (ValidarIncidencia())
        //    {
        //        if (ExcluirIncidencia(idRegra))
        //        {
        //            var list = new List<StatusIncidencia>();
        //            foreach (GridViewRow row in gvIncidencia.Rows)
        //            {
        //                int incidencia = 0;
        //                int.TryParse((row.FindControl("txtIncidencia") as TextBox).Text, out incidencia);
        //                int dias = 0;
        //                int.TryParse((row.FindControl("txtDia") as TextBox).Text, out dias);
        //                var cbBloqueio = row.FindControl("cbBloqueio") as CheckBox;
        //                var obj = new StatusIncidencia();
        //                obj.idSituacao = int.Parse(ddlStatus.SelectedValue);
        //                obj.idCampanha = idRegra;
        //                obj.qtd = incidencia;
        //                obj.dias = cbBloqueio.Checked ? 0 : dias;
        //                obj.fgBloqueio = cbBloqueio.Checked;
        //                list.Add(obj);
        //            }
        //            var retorno = StatusIncidenciaBLL.Insert(list);
        //            if (retorno.Error == Enumerator.Error.Success)
        //            {
        //                Funcao.Alert(ClientScript, "Regra gravada com sucesso");
        //                mvRegra.ActiveViewIndex = 0;
        //                CarregarGridRegra();
        //            }
        //            else
        //                Funcao.Alert(ClientScript, retorno.Message);
        //        }
        //    }
        //}
        //#endregion

        #region ExcluirIncidencia
        protected bool ExcluirIncidencia(int idRegra)
        {
            var obj = new StatusIncidencia();
            obj.idCampanha = idRegra;
            var retorno = StatusIncidenciaBLL.Delete(obj);
            if (retorno.Error == Enumerator.Error.Failed)
                Funcao.Alert(ClientScript, retorno.Message);
            return retorno.Error == Enumerator.Error.Success;
        }
        #endregion

        #region Editar
        protected void Editar(int idRegra)
        {
            var retorno = RegraAtendimentoBLL.Select(idRegra);
            if (retorno.Error == Enumerator.Error.Success)
            {
                mvRegra.ActiveViewIndex = 1;
                var list = retorno.List;
                hfRegraId.Value = list[0].idRegraCallCenter.ToString();
                txtNomeRegra.Text = list[0].NomeRegra;
                txtDescricaoRegra.Text = list[0].DescricaoRegra;
                ddlTipoRegra.SelectedIndex = ddlTipoRegra.Items.IndexOf(ddlTipoRegra.Items.FindByValue(list[0].Sigla));
                var obj = new StatusIncidencia();
                obj.idCampanha = list[0].idRegraCallCenter;
                var retornoS = StatusIncidenciaBLL.Select(obj);
                if (retornoS.Error == Enumerator.Error.Success)
                {
                    int idStatus = retornoS.List[0].idSituacao;
                    ddlStatus.SelectedIndex = ddlStatus.Items.IndexOf(ddlStatus.Items.FindByValue(idStatus.ToString()));
                    ListIncidencia = (List<StatusIncidencia>)retornoS.List;
                    //CarregarGridIncidencia();
                }
                else
                    Funcao.Alert(ClientScript, retornoS.Message);
            }
            else
                Funcao.Alert(ClientScript, retorno.Message);
        }
        #endregion

        #region Excluir
        protected void Excluir(int idRegra)
        {
            if (ExcluirIncidencia(idRegra))
            {
                var retorno = RegraAtendimentoBLL.Delete(idRegra);
                if (retorno.Error == Enumerator.Error.Success)
                {
                    Funcao.Alert(ClientScript, "Excluído com sucesso");
                    CarregarGridRegra();
                }
                else
                    Funcao.Alert(ClientScript, retorno.Message);
            }
        }
        #endregion

        #region ValidarRegra
        protected bool ValidarRegra()
        {
            string msg = string.Empty;
            if (string.IsNullOrWhiteSpace(txtNomeRegra.Text))
                msg = "Preencha o campo Nome regra";
            else if (string.IsNullOrWhiteSpace(txtDescricaoRegra.Text))
                msg = "Preencha o campo Descrição regra";
            else if (ddlTipoRegra.SelectedValue.Equals("0"))
                msg = "Selecione a ação da regra";
            //else if (gvIncidencia.Rows.Count > 0 && ddlStatus.SelectedValue.Equals("0"))
            //    msg = "Selecione o Status de incidência";

            bool retorno = string.IsNullOrWhiteSpace(msg);
            if (!retorno)
                Funcao.Alert(ClientScript, msg);

            return retorno;
        }
        #endregion

        //#region ValidarIncidencia
        //protected bool ValidarIncidencia()
        //{
        //    string msg = string.Empty;
        //    int dias = 0;
        //    int incidencia = 0;
        //    foreach (GridViewRow row in gvIncidencia.Rows)
        //    {
        //        if (!int.TryParse((row.FindControl("txtDia") as TextBox).Text, out dias) && int.TryParse((row.FindControl("txtIncidencia") as TextBox).Text, out incidencia))
        //        {
        //            msg = "Campo incidência e dias devem ser numéricos";
        //            break;
        //        }
        //    }
        //    bool retorno = string.IsNullOrWhiteSpace(msg);
        //    if (!retorno)
        //        Funcao.Alert(ClientScript, msg);
        //    return retorno;
        //}
        //#endregion

        #region HabilitarDesabilitar
        protected void HabilitarDesabilitar(int idRegra, bool statusAtual)
        {
            var obj = new RegraAtendimento();
            obj.idRegraCallCenter = idRegra;
            obj.fgAtivo = !statusAtual;
            var retorno = RegraAtendimentoBLL.UpdateStatus(obj);
            if (retorno.Error == Enumerator.Error.Success)
                Funcao.Alert(ClientScript, "Status atualizado");
            else
                Funcao.Alert(ClientScript, retorno.Message);
            CarregarGridRegra();
        }
        #endregion

        #endregion

        #region "Eventos"

        #region btnNovo_Click
        protected void btnNovo_Click(object sender, EventArgs e)
        {
            LimparCampos();
            mvRegra.ActiveViewIndex = 1;
        }
        #endregion

        #region gvRegra_RowCommand
        protected void gvRegra_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            int idRegra = 0;
            switch (e.CommandName)
            {
                case "editar":
                    idRegra = int.Parse(e.CommandArgument.ToString());
                    Editar(idRegra);
                    break;
                case "excluir":
                    idRegra = int.Parse(e.CommandArgument.ToString());
                    Excluir(idRegra);
                    break;
                case "status":
                    int index = int.Parse(e.CommandArgument.ToString());
                    idRegra = int.Parse(gvRegra.DataKeys[index]["idRegraCallCenter"].ToString());
                    bool status = bool.Parse(gvRegra.DataKeys[index]["fgAtivo"].ToString());
                    HabilitarDesabilitar(idRegra, status);
                    break;
            }
        }
        #endregion

        #region gvRegra_RowDataBound
        protected void gvRegra_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                bool status = bool.Parse(gvRegra.DataKeys[e.Row.RowIndex]["fgAtivo"].ToString());
                var botao = e.Row.FindControl("btnStatus") as Button;
                if (botao != null)
                {
                    if (status)
                        botao.Text = "Desabilitar";
                    else
                        botao.Text = "Habilitar";
                }
            }
        }
        #endregion

        #region btnGravar_Click
        protected void btnGravar_Click(object sender, EventArgs e)
        {
            GravarRegra();
        }
        #endregion

        #region btnVoltar_Click
        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            mvRegra.ActiveViewIndex = 0;
        }
        #endregion

        //#region btnInsereIncidencia_Click
        //protected void btnInsereIncidencia_Click(object sender, EventArgs e)
        //{
        //    GravaList(true);
        //    CarregarGridIncidencia();
        //}
        //#endregion

        //#region gvIncidencia_RowCommand
        //protected void gvIncidencia_RowCommand(object sender, GridViewCommandEventArgs e)
        //{
        //    int idStatusIncidencia = int.Parse(e.CommandArgument.ToString());
        //    switch (e.CommandName)
        //    {
        //        case "excluir":
        //            var obj = new StatusIncidencia();
        //            obj = ListIncidencia.Where(c => c.idStatusIncidencia == idStatusIncidencia).ToList()[0];
        //            RemoveListIncidencia(obj);
        //            CarregarGridIncidencia();
        //            break;
        //    }
        //}
        //#endregion

        //#region txt_incidencia_changed
        //protected void txt_incidencia_changed(object sender, EventArgs e)
        //{
        //    GravaList();
        //}
        //#endregion

        #endregion

    }
}